﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NouvelleDenreeForm;
using System.Data.Objects;
using System.Windows.Forms.DataVisualization.Charting;
using System.Collections;


namespace Recette
{
    public partial class moduleRecette : Form
    {
        public moduleRecette()
        {
            InitializeComponent();
       
          remplirListeRecette();
          initComboBox();
          if (listViewRecette.Items.Count != 0)
          {
              listViewRecette.Items[0].Focused = true;
              listViewRecette.Items[0].Selected = true;
          }

         
       
        }




        private void initComboBox()
        {
            BddRecettesEntities entitie = new BddRecettesEntities();
            List<String> lSaison = new List<String>();
            List<String> lTypeRecette = new List<String>();

           comboBoxTypeRecette.Items.Add("");
            comboBoxSaison.Items.Add("");
            lSaison = entitie.getAllSaison().ToList();
            lTypeRecette = entitie.getAllTypeRecette().ToList();

            foreach (String s in lSaison)
                comboBoxSaison.Items.Add(s);

            foreach (String s in lTypeRecette)
                comboBoxTypeRecette.Items.Add(s);

           

        }

        private void remplirListeRecette()
        {
           
           
            BddRecettesEntities entity = new BddRecettesEntities();
            List<RecetteList> listRecette = new List<RecetteList>();

            listRecette = entity.getRecetteList().ToList();

            remplirListeRecettePart(listRecette);





        }

        private void remplirListeRecettePart(List<RecetteList> listRecette)
        {


            listViewRecette.Items.Clear();
            foreach (RecetteList recette in listRecette)
            {
                ListViewItem item = new ListViewItem(new[] { recette.NomRecette, recette.TypeRecette, recette.nomSaison });
                if ((listViewRecette.Items.Count % 2) == 0)
                    item.BackColor = Color.WhiteSmoke;
                listViewRecette.Items.Add(item);
            }
        }
          

        private void recetteToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            NouvelleRecette newRecette = new NouvelleRecette();
            newRecette.Show();
            remplirListeRecette();
        }

        private void denréeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bool nouvelleDenree = true;
         
             //Liste de String pour les saisons
            BddRecettesEntities bddEntity = new BddRecettesEntities();
               try
            {
                while (nouvelleDenree)
                {
                    ObjectResult<String> getSaison;
                    ObjectResult<String> getCategorie;

                    //Fenêtre enfant
                    NouvelleDenreeForm.NouvelleDenreeForm form;
                    //Récupère les saisons via procédure stockée


                    getSaison = bddEntity.getAllSaison();
                    getCategorie = bddEntity.getAllCategorie();

                    //Construction de la fenêtre enfant
                    form = new NouvelleDenreeForm.NouvelleDenreeForm(getSaison.ToList(), getCategorie.ToList());

                    if (form.ShowDialog() == DialogResult.OK)
                    {
                        if (form.NomDenree != "" && form.CategorieDenree != "" && form.SaisonDenree != "")
                        {
                            bddEntity.insertDenree(form.NomDenree, form.SaisonDenree, form.CategorieDenree);
                            MessageBox.Show("La denrée " + form.NomDenree + " a été ajouté avec succés", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                            throw (new Exception());
                    }

                 
                    DialogResult result = MessageBox.Show("Voulez-vous ajouter une nouvelle denrée ?","Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == DialogResult.No)
                        nouvelleDenree = false;
                    else
                        nouvelleDenree = true;


                }
            }
            catch (Exception)
            {
                MessageBox.Show("Erreur lors de l'enregistrement");
            }

            finally
            {

                bddEntity.Dispose();
            }
        }

        private void afficherLaRecetteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection listItem = listViewRecette.SelectedItems;
            String nomRecette="";
            if (listItem.Count != 1)
            {
                MessageBox.Show("Vous devez choisir une seule recette");
                return;
            }

            foreach (ListViewItem item in listItem)
                nomRecette = item.SubItems[0].Text;

            AffichageRecette affich = new AffichageRecette(nomRecette);
            affich.Show();
            



        }

        private void creerGrapheDenree(String nomDenree)
        {
            Series serie = new Series();
            BddRecettesEntities entite = new BddRecettesEntities();
            Title title = new Title();
            Legend legend = new Legend();
            graphDenree.Titles.Add(title);
            graphDenree.Series.Add(serie);
            //graphDenree.Legends.Add(legend);

          
       
          
            List<statDenree> lSDenree = entite.statDenree(nomDenree).ToList();
            graphDenree.Series[0].ChartType = SeriesChartType.Pie;
            foreach (statDenree SDenree in lSDenree)
            {
                graphDenree.Series[0].Points.AddXY(SDenree.nomCatégorie, SDenree.NombreDenree);
               
            }
           graphDenree.ChartAreas[0].BackColor= SystemColors.ButtonFace;
        

        }

        private void listViewRecette_SelectedIndexChanged(object sender, EventArgs e)
        {
            graphDenree.Visible = true;
        

            graphDenree.Series.Clear();
            graphDenree.Titles.Clear();
            if (listViewRecette.SelectedItems.Count == 1)
            {
               
                creerGrapheDenree(listViewRecette.SelectedItems[0].SubItems[0].Text);
                graphDenree.Titles[0].Text = listViewRecette.SelectedItems[0].SubItems[0].Text;
                graphDenree.Titles[0].Font = new Font(graphDenree.Titles[0].Font.Name, graphDenree.Titles[0].Font.Size + 2.0f, FontStyle.Bold);
                
            }
            else graphDenree.Visible = false;

     
        }

        private void listViewRecette_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            this.listViewRecette.ListViewItemSorter = new ListViewItemComparer(e.Column);
            listViewRecette.Sort();
             
        }

        private void buttonRecherche_Click(object sender, EventArgs e)
        {
            BddRecettesEntities entite = new BddRecettesEntities();

            try
            {
                if (textBoxNomRecette.Text == "" && comboBoxSaison.Text == "" && comboBoxTypeRecette.Text=="")
                    throw new Exception();

                List<RecetteList> listRecette = new List<RecetteList>();

                listRecette = entite.listRechercheRecette(textBoxNomRecette.Text, comboBoxSaison.Text, comboBoxTypeRecette.Text).ToList();
                remplirListeRecettePart(listRecette);

            }
            catch (Exception)
            {
                MessageBox.Show("Vous devez spécifier au moins un critère de recherche","Erreur",MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                entite.Dispose();

            }
        }
            

        private void buttonToutAfficher_Click(object sender, EventArgs e)
        {
            List<RecetteList> listRecette = new List<RecetteList>();

            BddRecettesEntities entite = new BddRecettesEntities();
            listRecette = entite.listRechercheRecette("","","").ToList();
            remplirListeRecettePart(listRecette);
        }

        private void ajouterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EnvoieMail formMail = new EnvoieMail();
            formMail.ShowDialog();
        }

    

      
      
    }
}